"""
这是Student模块主要操作文件
"""
import json

from 期末项目.student.student import Student  # 导入Student类
class StudentManager(object):
    # 创建一个列表----对应Java里的list集合
    def __init__(self):
        # 用来对数据进行临时存储
        self.stu_list = []

    # 执行方法
    def run(self):
        print("加载文件夹内部的数据")

        while True:
            # 展示可以选择的功能

            # int(a) 把a转换成为int类型数据
            # input("提示语句")键盘输入，默认输入的数据类型字符串类型
            xz1 = int(input("请输入你想选择功能:"))
            if xz1 == 1:
                self.stu_add() # pass   # pass 表示我目测还不知道写什么
            elif xz1 == 2:
                self.stu_del()
            elif xz1 == 3:
                self.stu_up()
            elif xz1 == 4:
                self.stu_seOne()
            elif xz1 == 5:
                self.stu_seAll()
            elif xz1 == 6:
                self.save()
            elif xz1 == 7:
                # 结束循环并且推出模块
                self.load()
                break

    def xianshi(self):
        print("1.增加学生功能")
        print("2.删除学生功能")
        print("3.修改学生功能")
        print("4.查询一个学生功能")
        print("5.查询全部学生功能")
        print("6。保存到文件学生功能")
        print("7.退出系统功能")

# 增加方法
    def stu_add(self):
        name = input("请输入你的名字")
        age = input("请输入你的年龄")
        gender = input("请输入你的性别")
        tel = input("请输入你的电话号码")
    # 把键盘数据保存到对象里面
        student = Student(name,age,gender,tel)
    # 把对象保存到列表里面去,append方法就是把数据加到列表内部
        self.stu_list.append(student)
        print("下面的数据时列表内部的数据")
    # in后面跟的是要循环的列表或者集合   循环把列表内部数据赋值给i
        for i in self.stu_list:
            print(i)

#删除功能  remove(数据)  删除列表内容数据
    def stu_del(self):
        if  len (self.stu_list) == 0:
            print("列表没数据")
        else:
            name=input("请输入删除对象的名字")
        # 遍历列表
            for i in self.stu_list:
                if i.name == name: # 表示有我们想要删除的数据
                    self.stu_list.remove(i) #删除数据
                else:
                    print("没有找到")
            print("操作之后列表的数")
            for i in self.stu_list:
                print(i)

        #修改方法


    def stu_up(self):
        if len(self.stu_list) == 0:
            print("列表没有数据")
        else:
            name = input("请输入修改对象的名字")
            for i in self.stu_list:
                # 表示有我们想要删除的数据
                if i.name == name:
                    i.name = input("请输入你要修改的姓名")
                    i.age = input("请输入你要修改的年龄")
                    i.gender = input("请输入你要修改的性别")
                    i.tel = input("请输入你要修改的电话")
                else:
                    print("没有找到")
            print("操作之后列表的数据")
            for i in self.stu_list:
                print(i)

    def stu_seOne(self):
        if len(self.stu_list) == 0:
            print("列表没有数据")
        else:
            name = input("请输入查询对象的名字")
            for i in self.stu_list:
                if i.name == name:
                    print(i)
                    break
            else:
                print("没有找到")
    def stu_seAll(self):
        if len(self.stu_list) == 0:
            print("列表没有数据")
        else:
            for i in self.stu_list:
                print(i)


    # def save_to_file(self):
    #     if len(self.stu_list) == 0:
    #             print("列表没有数据")
    #     else:
    #         file_name = input("请输入保存文件的名称")
    #         with open(file_name, 'w') as f:
    #             for i in self.stu_list:
    #                 f.write(f"姓名：{i.name} 年龄：{i.age} 性别：{i.gender} 电话：{i.tel}\n")
    #             print("保存成功")

    # def save(self):
    #     # open表示打开文件  student.data  是文件的路径
    #     # “w”  表示往文件内部写入数据  如果么有知道文件  就创建
    #     # 注意“w”他会把文件内部原来的数据清空写入
    #     #  encoding=“UTF-8” 防止中文乱码
    #     f = open("student.data","w",encoding="UTF-8")
    #     """
    #     for i in self.stu_list:遍历列表
    #     i.__dict__ 把i对象内部数据转换称为字典
    #     """
    #     new_list = [i.__dict__ for i in self.stu_list]
    #     # f.write(a) 把数据a写入文件
    #     # str(new_list) 把字典内部数据转换为字符串
    #     f.write(str(new_list))
    #     # 关闭文件
    #     f.close()
    def save(self):
        # 使用with语句打开文件，可以自动关闭文件，无需手动调用close方法
        with open("student.data", "w", encoding="UTF-8") as f:
            # 将学生信息列表转换为字典列表
            new_list = [i.__dict__ for i in self.stu_list]
            # 将字典列表转换为JSON格式的字符串，并写入文件
            json.dump(new_list, f, ensure_ascii=False)
    def load(self):
        try:
            f = open("student.data","r",encoding="UTF-8")
        except:
            f = open("student.data","w",encoding="UTF-8")
        else: # 如果try里面没有出息异常就执行else里面的代码
            data = f.read()# 读取文件内部的数据
            # 因为文件内部数据是字符串形式所以把字符串转换为字典
            new_list = eval(data)
            """
            for i in new_list:遍历字典
            i[key值]就能得到对应的value值
            然后把对应的value值作为属性值创建对象
            最后把对象放到列表内部达到取出文件内部数据的方法
            """
            self.stu_list = [Student(i["name"], i["age"],
                                     i["gender"],i["tel"])
                             for i in new_list]
        finally:
            f.close()# 关闭文件